package com.demo.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 成绩管理服务接口
 */
public interface GradeService {
    
    /**
     * 提交成绩
     * @param studentCourseId 学生选课ID
     * @param usualGrade 平时成绩
     * @param examGrade 考试成绩
     * @param remark 备注
     * @return 是否成功
     */
    boolean submitGrade(Long studentCourseId, BigDecimal usualGrade, BigDecimal examGrade, String remark);
    
    /**
     * 批量提交成绩
     * @param grades 成绩列表
     * @return 成功条数
     */
    int batchSubmitGrades(List<Map<String, Object>> grades);
    
    /**
     * 获取课程的学生成绩列表
     * @param courseId 课程ID
     * @param semester 学期
     * @return 学生成绩列表
     */
    List<Map<String, Object>> getCourseGrades(Long courseId, String semester);
    
    /**
     * 获取教师负责课程的学生成绩列表
     * @param teacherId 教师ID
     * @param semester 学期
     * @return 学生成绩列表
     */
    List<Map<String, Object>> getTeacherCourseGrades(Long teacherId, String semester);
    
    /**
     * 更新成绩
     * @param studentCourseId 学生选课ID
     * @param usualGrade 平时成绩
     * @param examGrade 考试成绩
     * @param remark 备注
     * @return 是否成功
     */
    boolean updateGrade(Long studentCourseId, BigDecimal usualGrade, BigDecimal examGrade, String remark);
    
    /**
     * 删除成绩（将成绩清空）
     * @param studentCourseId 学生选课ID
     * @return 是否成功
     */
    boolean deleteGrade(Long studentCourseId);
    
    /**
     * 计算总成绩和等级
     * @param usualGrade 平时成绩
     * @param examGrade 考试成绩
     * @return Map包含finalGrade和gradeLevel
     */
    Map<String, Object> calculateFinalGrade(BigDecimal usualGrade, BigDecimal examGrade);
}

